/*     */ package com.zimbra.cs.ldap;
/*     */ 
/*     */ import com.zimbra.common.util.ByteUtil;
/*     */ import com.zimbra.common.util.UUIDUtil;
/*     */ import java.util.HashMap;
/*     */ import java.util.Map;
/*     */ import javax.naming.ldap.Rdn;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class LdapUtil
/*     */ {
/*     */   public static String formatMultipleMatchedEntries(ZSearchResultEntry first, ZSearchResultEnumeration rest)
/*     */     throws LdapException
/*     */   {
/*  36 */     StringBuffer dups = new StringBuffer();
/*  37 */     dups.append("[" + first.getDN() + "] ");
/*  38 */     while (rest.hasMore()) {
/*  39 */       ZSearchResultEntry dup = rest.next();
/*  40 */       dups.append("[" + dup.getDN() + "] ");
/*     */     }
/*     */     
/*  43 */     return new String(dups);
/*     */   }
/*     */   
/*     */   public static String getLdapBooleanString(boolean b) {
/*  47 */     if (b) {
/*  48 */       return "TRUE";
/*     */     }
/*  50 */     return "FALSE";
/*     */   }
/*     */   
/*     */   public static boolean contains(String[] values, String val) {
/*  54 */     if (values == null) {
/*  55 */       return false;
/*     */     }
/*     */     
/*  58 */     for (String s : values) {
/*  59 */       if (s.compareToIgnoreCase(val) == 0) {
/*  60 */         return true;
/*     */       }
/*     */     }
/*  63 */     return false;
/*     */   }
/*     */   
/*     */   public static Object decodeBase64IfBinary(boolean isBinary, String value) {
/*  67 */     return isBinary ? ByteUtil.decodeLDAPBase64(value) : value;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String attrNameToBinaryTransferAttrName(boolean isBinaryTransfer, String attrName)
/*     */   {
/*  76 */     return isBinaryTransfer ? attrName + ";binary" : attrName;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String binaryTransferAttrNameToAttrName(String transferAttrName)
/*     */   {
/*  86 */     if (transferAttrName.endsWith(";binary")) {
/*  87 */       String[] parts = transferAttrName.split(";");
/*  88 */       if (parts.length == 2) {
/*  89 */         return parts[0];
/*     */       }
/*     */     }
/*  92 */     return transferAttrName;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String escapeSearchFilterArg(String s)
/*     */   {
/* 104 */     if (s == null) {
/* 105 */       return null;
/*     */     }
/* 107 */     return s.replaceAll("([\\\\\\*\\(\\)])", "\\\\$0");
/*     */   }
/*     */   
/*     */   public static String generateUUID() {
/* 111 */     return UUIDUtil.generateUUID();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static boolean isValidUUID(String strRep)
/*     */     throws IllegalArgumentException
/*     */   {
/* 127 */     if (strRep.length() > 127) {
/* 128 */       throw new IllegalArgumentException("uuid must be no longer than 127 characters");
/*     */     }
/*     */     
/*     */ 
/* 132 */     if (strRep.contains(":")) {
/* 133 */       throw new IllegalArgumentException("uuid must not contain ':'");
/*     */     }
/*     */     
/* 136 */     return true;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String getLaterTimestamp(String timeA, String timeB)
/*     */   {
/* 149 */     if (timeA == null)
/* 150 */       return timeB;
/* 151 */     if (timeB == null) {
/* 152 */       return timeA;
/*     */     }
/* 154 */     return timeA.compareTo(timeB) > 0 ? timeA : timeB;
/*     */   }
/*     */   
/*     */   public static String getEarlierTimestamp(String timeA, String timeB) {
/* 158 */     if (timeA == null)
/* 159 */       return timeB;
/* 160 */     if (timeB == null) {
/* 161 */       return timeA;
/*     */     }
/* 163 */     return timeA.compareTo(timeB) < 0 ? timeA : timeB;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String computeDn(String name, String template)
/*     */   {
/* 187 */     if ((template == null) || (template.equals("")) || (template.equals("%n"))) {
/* 188 */       return name;
/*     */     }
/*     */     
/* 191 */     int at = name.indexOf("@");
/*     */     
/* 193 */     Map<String, String> vars = new HashMap();
/* 194 */     vars.put("n", name);
/*     */     
/* 196 */     if (at == -1) {
/* 197 */       vars.put("u", name);
/*     */     } else {
/* 199 */       vars.put("u", name.substring(0, at));
/* 200 */       String d = name.substring(at + 1);
/* 201 */       vars.put("d", d);
/* 202 */       vars.put("D", domainToDN(d));
/*     */     }
/*     */     
/* 205 */     return expandStr(template, vars);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */   @LdapTODO.TODO
/*     */   public static String escapeRDNValue(String rdn)
/*     */   {
/* 214 */     return Rdn.escapeValue(rdn);
/*     */   }
/*     */   
/*     */   @LdapTODO.TODO
/*     */   public static String unescapeRDNValue(String rdn) {
/* 219 */     return (String)Rdn.unescapeValue(rdn);
/*     */   }
/*     */   
/*     */   public static String domainToDN(String[] parts, int offset) {
/* 223 */     StringBuffer sb = new StringBuffer(128);
/* 224 */     for (int i = offset; i < parts.length; i++) {
/* 225 */       if (i - offset > 0) {
/* 226 */         sb.append(",");
/*     */       }
/* 228 */       sb.append("dc").append("=").append(escapeRDNValue(parts[i]));
/*     */     }
/* 230 */     return sb.toString();
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String domainToDN(String domain)
/*     */   {
/* 239 */     return domainToDN(domain.split("\\."), 0);
/*     */   }
/*     */   
/*     */   public static String domainToTopLevelDN(String domain) {
/* 243 */     String[] segments = domain.split("\\.");
/* 244 */     return domainToDN(segments, segments.length - 1);
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String[] dnToRdnAndBaseDn(String dn)
/*     */   {
/* 260 */     String[] values = new String[2];
/* 261 */     int baseDnIdx = dn.indexOf(",");
/*     */     
/* 263 */     if ((baseDnIdx != -1) && (dn.length() > baseDnIdx + 1)) {
/* 264 */       values[0] = dn.substring(0, baseDnIdx);
/* 265 */       values[1] = dn.substring(baseDnIdx + 1);
/*     */     } else {
/* 267 */       values[0] = dn;
/* 268 */       values[1] = dn;
/*     */     }
/*     */     
/* 271 */     return values;
/*     */   }
/*     */   
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   public static String expandStr(String fmt, Map<String, String> vars)
/*     */   {
/* 283 */     if ((fmt == null) || (fmt.equals(""))) {
/* 284 */       return fmt;
/*     */     }
/* 286 */     if (fmt.indexOf('%') == -1) {
/* 287 */       return fmt;
/*     */     }
/* 289 */     StringBuffer sb = new StringBuffer(fmt.length() + 32);
/* 290 */     for (int i = 0; i < fmt.length(); i++) {
/* 291 */       char ch = fmt.charAt(i);
/* 292 */       if (ch == '%') {
/* 293 */         i++;
/* 294 */         if (i > fmt.length()) {
/* 295 */           return sb.toString();
/*     */         }
/* 297 */         ch = fmt.charAt(i);
/* 298 */         if (ch != '%') {
/* 299 */           String val = (String)vars.get(Character.toString(ch));
/* 300 */           if (val != null) {
/* 301 */             sb.append(val);
/*     */           } else {
/* 303 */             sb.append(ch);
/*     */           }
/*     */         } else {
/* 306 */           sb.append(ch);
/*     */         }
/*     */       } else {
/* 309 */         sb.append(ch);
/*     */       }
/*     */     }
/* 312 */     return sb.toString();
/*     */   }
/*     */ }


/* Location:              /home/mint/zimbrastore.jar!/com/zimbra/cs/ldap/LdapUtil.class
 * Java compiler version: 7 (51.0)
 * JD-Core Version:       0.7.1
 */